#!/usr/bin/perl

use strict; # прагмы strict, warnings указывают на строгий стиль программы

use warnings;

use lib '.'; # в путь поиска библиотек включается текущая папка "."

use CleverBot; # подключается модуль CleverBot

my %argv = @ARGV; # список аргументов командной строки загоняется в хеш массив. 

# Предполагается , что аргументы ком. стр. идут парами: ключ1 значение1 кл2 зн2.

my $conf = $argv{'-c'} || "clever_bot.conf"; # если указан аргумент -с, то последующее за ним имя файла будет использовано в качестве конфа.

# В конфигурационном файле содержатся переменные, определяющие всякие настройки, в основном, пути к важным файлам..
# Необходимость определять пути диктуется тем, что модули программы вызываются также из веб-интерфейса в режиме CGI.
# А, как известно, веб-сервер при выполнении скрипта не делает 'cd'..
# Компенсацией неообходимости использовать конф-файл является заложенная гибкость настроек..
# Можно создать два разных конфа, которые будут использовать разные настройки, и при запуске выбирать, какой из них использовать.


my $debug_call = $argv{'--debug_call'}; 

my $debug_explain = $argv{'--debug_explain'};

# две переменные, определяющие, какие отладочные сообщения будут выводиться в STDOUT.
# Ненулевое $debug_call будет выводить информацию о том,
# какие функции вызываются в процессе работы. $debug_explain - детальная информация о ходе работы сложных модулей.
# <br><b>Пример</b> использования аргументов из командной строки:
# <br><code> ./clever_bot -c clever_bot.conf --debug_call 1 --debug_explain 1 </code>


my $l = new CleverBot; # создается объект из модуля CleverBot.pm

$l->set_conf( $conf ) or die $l->error; # вызывается метод set_conf этого объекта. 

# Если в процессе вызова возникают ошибки, работа прекращается и выводится ошибка.

$l->{ debug_call } = $debug_call;

$l->{ debug_explain } = $debug_explain;

# две переменные, управляющие уровнем отладки, помещаются в специальные места, где на них будет ориентироваться программа пр своей работе.

$l->launch();

# запускается метод launch, главный метод из модуля CleverBot.pm. 

# Метод launch() запускает сканирование сайтов. Для этого он использует соответствующие модули из папки CleverBot/sites.

print $l->error() ? "Start $l->{start_time}:\n ".$l->error() : '';

# После этого печатаются ошибки, которые он произвел.

print "\n\n"; # 2 line empty


